package com.ftg.youx.tools;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 前后台封装的一个工具
 *
 * @author 布衣
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class R<T> {

    private Integer code;

    private String msg;

    private T data;

    /**
     * 返回成功
     * 返回失败
     * @param data  返回数据
     * @return     R
     * @param <T>  返回数据类型
     */
    public static <T> R<T> ok(T data) {
        return new R<T>(200, "操作成功", data);
    }

     /**
     * 返回失败
     * @param msg   返回信息
     * @param data  返回数据
     * @return     R
     * @param <T>  返回数据类型
     */
    public static <T> R<T> ok(String msg, T data) {
        return new R<T>(200, msg, data);
    }

    /**
     * 返回失败
     * @param msg   返回信息
     * @return     R
     * @param <T>  返回数据类型
     */
    public static <T> R<T> error(String msg) {
        return new R<T>(500, msg, null);
    }

    /**
     * 返回失败
     * @param s   信息封闭
     * @param data  返回数据
     * @return     R
     * @param <T>  返回数据类型
     */
    public static <T> R<T> build(S s, T data) {
        return new R<T>(s.getCode(), s.getMsg(), data);
    }

}
